import java.io.*;
import java.util.*;
import java.text.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.lang.*;
import java.net.*;
import java.sql.*;
import dbBean.DBConnectionManager;

public class Clave extends HttpServlet {

DBConnectionManager connMgr=null;

ServletContext sc;

  public String generaClave(int longitud) {
	String caracteres="abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789";
	String clave="";

	for(int i=0;i<longitud;i++)
		clave+=caracteres.charAt((int)Math.floor(Math.random()*caracteres.length()));

	return(clave);
  }

  public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
	doPost(request, response);
  }

  public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

    String tfno;
    String clave=null;
    String claveCrypt=null;
    String idUser="";

    log(request);

    tfno=request.getParameter("tfno");
    if(tfno==null) {
	sc.log("- WARNING: falta el parámetro 'tfno' en la consulta");
	return;
    }
    if(!tfno.matches("\\d\\d\\d\\d\\d\\d\\d\\d\\d")) {
        sc.log("WARNING: El campo teléfono no tiene un el formato correcto");
	return;
    }

    clave=generaClave(6);
    claveCrypt=PasswordService.getInstance().encrypt(clave);

    try {
      sc.log("- Se va a consultar la clave en la BBDD");
      Connection con = connMgr.getConnection("mysql");
      Statement stmt = con.createStatement();
      ResultSet rs=stmt.executeQuery("SELECT id FROM usuarios WHERE telefono='"+tfno+"';");
      if(rs.next()) {
	  sc.log("- Se ha encontrado el usuario en la BBDD");
  	  idUser=rs.getString("id");
	  stmt.executeUpdate("UPDATE usuarios SET password='"+claveCrypt+"' WHERE id="+idUser+";");
      } else {
	  sc.log("No se ha encontrado el usuario en la BBDD. Se da de alta y se genera una nueva clave");
	  stmt.executeUpdate("INSERT INTO usuarios (telefono, user, password, codigo) VALUES ('"+tfno+"', null, '"+claveCrypt+"', null);");

	  rs=stmt.executeQuery("SELECT id FROM usuarios WHERE telefono='"+tfno+"';");
	  rs.next();
	  File d=new File("/usr/local/apache2/htdocs/PaginasPersonales/usuarios/"+rs.getInt("id"));
	  d.mkdir();
	  File dAudio=new File(d,"audio");
	  dAudio.mkdir();
	  File dPaginas=new File(d,"paginas");
	  dPaginas.mkdir();
      }
	
      rs.close();
      stmt.close();
      connMgr.freeConnection("mysql",con);
      sc.log("Liberamos la conexión con la BBDD");
    } catch(SQLException e) {
      sc.log("doPost: Clave", e);
    }

    request.setAttribute("clave",clave);
    request.setAttribute("tfno",tfno);
    RequestDispatcher rd=sc.getRequestDispatcher("/jsp/EnviaClave.jsp");
    rd.forward(request,response);
  }

  public void log(HttpServletRequest r) {
    String p;
                                                                                
    sc.log("---------------");
    sc.log(new java.util.Date()+" - "+r.getRemoteAddr());
    sc.log(r.getRequestURI());
                                                                                
    Enumeration e=r.getParameterNames();
    while(e.hasMoreElements()) {
      p=(String)e.nextElement();
      sc.log(p+" = "+r.getParameter(p));
    }
    e=r.getHeaderNames();
    while(e.hasMoreElements()) {
      p=(String)e.nextElement();
      sc.log(p+" = "+r.getHeader(p));
    }
  }

  public void init(ServletConfig config) throws ServletException {
    super.init(config);

    sc=config.getServletContext();

    if((connMgr=(DBConnectionManager)sc.getAttribute("connMgr"))==null) {
    	connMgr = DBConnectionManager.getInstance();
    	sc.setAttribute("connMgr", connMgr);
    }
  }

}

